// ========================================================
// 0x0890918c: glinterface::square_3D(float, float, float, int, int, int, int, float, int)
// ========================================================
// Function: square_3D @ 0890918c

/* DWARF original prototype: void square_3D(glinterface * this, GLfloat x, GLfloat y, GLfloat z, int
   r, int g, int b, int a, GLfloat size, int axis) */

void __thiscall
glinterface::square_3D
          (glinterface *this,GLfloat x,GLfloat y,GLfloat z,int r,int g,int b,int a,GLfloat size,
          int axis)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  float *pfVar5;
  GLubyte in_t0;
  int in_t1;
  undefined4 *puVar6;
  float fVar7;
  float in_f12;
  float in_f13;
  float in_f14;
  float in_f15;
  float fVar8;
  float local_58 [7];
  float local_3c;
  float local_38;
  float local_34;
  float local_30;
  float local_2c;
  
                    /* Unresolved local var: GLfloat[12] square@[???] */
  pfVar5 = local_58;
  puVar6 = &square_3D(float,float,float,int,int,int,int,float,int)::C_0;
  do {
    uVar1 = *puVar6;
    uVar2 = puVar6[1];
    uVar3 = puVar6[2];
    uVar4 = puVar6[3];
    puVar6 = puVar6 + 4;
    *pfVar5 = (float)uVar1;
    pfVar5[1] = (float)uVar2;
    pfVar5[2] = (float)uVar3;
    pfVar5[3] = (float)uVar4;
    pfVar5 = pfVar5 + 4;
  } while (puVar6 != &DAT_089dc484);
  fVar8 = in_f15 * DAT_089dc448;
  if (in_t1 == 2) {
    local_58[0] = -fVar8;
    local_58[1] = local_58[0];
    local_58[2] = fVar8;
    local_58[3] = local_58[0];
    local_58[4] = local_58[0];
    local_58[5] = local_58[0];
    local_58[6] = fVar8;
    local_3c = local_58[0];
    local_38 = fVar8;
    local_34 = fVar8;
    local_30 = local_58[0];
    local_2c = local_58[0];
  }
  else if (in_t1 == 3) {
    local_58[0] = -fVar8;
    local_58[1] = local_58[0];
    local_58[2] = local_58[0];
    local_58[3] = local_58[0];
    local_58[4] = fVar8;
    local_58[5] = local_58[0];
    local_58[6] = fVar8;
    local_3c = local_58[0];
    local_38 = local_58[0];
    local_34 = fVar8;
    local_30 = fVar8;
    local_2c = local_58[0];
  }
  else {
    fVar7 = -fVar8;
    if (in_t1 == 1) {
      local_58[0] = fVar7;
      local_58[1] = fVar7;
      local_58[2] = fVar8;
      local_58[3] = fVar7;
      local_58[4] = fVar8;
      local_58[5] = fVar8;
      local_58[6] = fVar7;
      local_3c = fVar7;
      local_38 = fVar7;
      local_34 = fVar7;
      local_30 = fVar8;
      local_2c = fVar7;
    }
  }
  glPushMatrix();
  glTranslatef(fVar8 + in_f12,fVar8 + in_f13,fVar8 + in_f14);
  glColor4ub(SUB41(x,0),SUB41(y,0),SUB41(z,0),in_t0);
  glVertexPointer(3,0x1406,0,local_58);
  glDrawArrays(5,0,4);
  glPopMatrix();
  return;
}

// ========================================================
// 0x0890935c: glinterface::square(float, float, float, int, int, int, int, float)
// ========================================================
// Function: square @ 0890935c

/* DWARF original prototype: void square(glinterface * this, GLfloat x, GLfloat y, GLfloat z, int r,
   int g, int b, int a, GLfloat size) */

void __thiscall
glinterface::square(glinterface *this,GLfloat x,GLfloat y,GLfloat z,int r,int g,int b,int a,
                   GLfloat size)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 *puVar5;
  float *pfVar6;
  GLubyte in_t0;
  GLfloat in_f12;
  GLfloat in_f13;
  GLfloat in_f14;
  float in_f15;
  float local_88 [12];
  undefined4 local_58 [12];
  
                    /* Unresolved local var: GLfloat[12] square@[???] */
  pfVar6 = local_88;
  local_58[0] = 0;
  local_58[1] = 0;
  local_58[2] = 0;
  local_58[3] = 0;
  local_58[4] = 0;
  local_58[5] = 0;
  local_58[6] = 0;
  local_58[7] = 0;
  local_58[8] = 0;
  local_58[9] = 0;
  local_58[10] = 0;
  local_58[0xb] = 0;
  puVar5 = local_58;
  do {
    uVar1 = *puVar5;
    uVar2 = puVar5[1];
    uVar3 = puVar5[2];
    uVar4 = puVar5[3];
    puVar5 = puVar5 + 4;
    *pfVar6 = (float)uVar1;
    pfVar6[1] = (float)uVar2;
    pfVar6[2] = (float)uVar3;
    pfVar6[3] = (float)uVar4;
    pfVar6 = pfVar6 + 4;
  } while (puVar5 != (undefined4 *)&stack0xffffffd8);
  local_88[0] = -in_f15;
  local_88[1] = local_88[0];
  local_88[4] = local_88[0];
  local_88[6] = local_88[0];
  glPushMatrix();
  glTranslatef(in_f12,in_f13,in_f14);
  glColor4ub(SUB41(x,0),SUB41(y,0),SUB41(z,0),in_t0);
  glVertexPointer(3,0x1406,0,local_88);
  glDrawArrays(5,0,4);
  glPopMatrix();
  return;
}

// ========================================================
// 0x089094b4: glinterface::line(float, float, float, float, float, float, int*)
// ========================================================
// Function: line @ 089094b4

/* DWARF original prototype: void line(glinterface * this, GLfloat x_origin, GLfloat y_origin,
   GLfloat z_origin, GLfloat x_destination, GLfloat y_destination, GLfloat z_destination, int *
   material) */

void __thiscall
glinterface::line(glinterface *this,GLfloat x_origin,GLfloat y_origin,GLfloat z_origin,
                 GLfloat x_destination,GLfloat y_destination,GLfloat z_destination,int *material)

{
  undefined1 local_38 [24];
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18;
  undefined4 local_14;
  undefined4 local_10;
  undefined4 local_c;
  
                    /* Unresolved local var: GLfloat[6] line@[???] */
  local_20 = 0;
  local_1c = 0;
  local_18 = 0;
  local_14 = 0;
  local_10 = 0;
  local_c = 0;
  glPushMatrix();
  glColor4ub(*(GLubyte *)x_origin,*(GLubyte *)((int)x_origin + 4),*(GLubyte *)((int)x_origin + 8),
             *(GLubyte *)((int)x_origin + 0xc));
  glVertexPointer(3,0x1406,0,local_38);
  glDrawArrays(1,0,2);
  glPopMatrix();
  return;
}

// ========================================================
// 0x08909548: glinterface::cube_skeleton(float, float, float, int, int, int, int, float)
// ========================================================
// Function: cube_skeleton @ 08909548

/* DWARF original prototype: void cube_skeleton(glinterface * this, GLfloat x, GLfloat y, GLfloat z,
   int r, int g, int b, int a, GLfloat size) */

void __thiscall
glinterface::cube_skeleton
          (glinterface *this,GLfloat x,GLfloat y,GLfloat z,int r,int g,int b,int a,GLfloat size)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  float *pfVar5;
  GLubyte in_t0;
  undefined4 *m;
  GLfloat in_f12;
  GLfloat in_f13;
  GLfloat in_f14;
  float in_f15;
  float local_268 [12];
  float local_238;
  float local_234;
  float local_230;
  float local_22c;
  float local_224;
  float local_21c;
  float local_218;
  float local_20c;
  float local_208;
  float local_204;
  float local_1fc;
  float local_1f0;
  float local_1ec;
  float local_1e8;
  float local_1e4;
  float local_1dc;
  float local_1d4;
  float local_1d0;
  float local_1c4;
  float local_1bc;
  float local_1a8;
  float local_190;
  float local_188;
  float local_17c;
  float local_178;
  float local_174;
  float local_16c;
  float local_168;
  float local_164;
  float local_15c;
  float local_150;
  float local_14c;
  undefined4 local_148 [72];
  
                    /* Unresolved local var: GLfloat[72] box@[???] */
  pfVar5 = local_268;
  m = local_148;
  memset(m,0,0x120);
  do {
    uVar1 = *m;
    uVar2 = m[1];
    uVar3 = m[2];
    uVar4 = m[3];
    m = m + 4;
    *pfVar5 = (float)uVar1;
    pfVar5[1] = (float)uVar2;
    pfVar5[2] = (float)uVar3;
    pfVar5[3] = (float)uVar4;
    pfVar5 = pfVar5 + 4;
  } while (m != (undefined4 *)&stack0xffffffd8);
  local_268[0] = -in_f15;
  local_268[1] = local_268[0];
  local_268[4] = local_268[0];
  local_268[6] = local_268[0];
  local_238 = local_268[0];
  local_234 = local_268[0];
  local_230 = local_268[0];
  local_22c = local_268[0];
  local_224 = local_268[0];
  local_21c = local_268[0];
  local_218 = local_268[0];
  local_20c = local_268[0];
  local_208 = local_268[0];
  local_204 = local_268[0];
  local_1fc = local_268[0];
  local_1f0 = local_268[0];
  local_1ec = local_268[0];
  local_1e8 = local_268[0];
  local_1e4 = local_268[0];
  local_1dc = local_268[0];
  local_1d4 = local_268[0];
  local_1d0 = local_268[0];
  local_1c4 = local_268[0];
  local_1bc = local_268[0];
  local_1a8 = local_268[0];
  local_190 = local_268[0];
  local_188 = local_268[0];
  local_17c = local_268[0];
  local_178 = local_268[0];
  local_174 = local_268[0];
  local_16c = local_268[0];
  local_168 = local_268[0];
  local_164 = local_268[0];
  local_15c = local_268[0];
  local_150 = local_268[0];
  local_14c = local_268[0];
  glPushMatrix();
  glTranslatef(in_f12,in_f13,in_f14);
  glColor4ub(SUB41(x,0),SUB41(y,0),SUB41(z,0),in_t0);
  glVertexPointer(3,0x1406,0,local_268);
  glDrawArrays(1,0,0x18);
  glPopMatrix();
  return;
}

// ========================================================
// 0x08909784: glinterface::solid_cube(float, float, float, int, int, int, int, float)
// ========================================================
// Function: solid_cube @ 08909784

/* DWARF original prototype: void solid_cube(glinterface * this, GLfloat x, GLfloat y, GLfloat z,
   int r, int g, int b, int a, GLfloat size) */

void __thiscall
glinterface::solid_cube
          (glinterface *this,GLfloat x,GLfloat y,GLfloat z,int r,int g,int b,int a,GLfloat size)

{
  int in_t0;
  GLfloat in_f12;
  GLfloat in_f13;
  GLfloat in_f14;
  float in_f15;
  float x_00;
  
  glPushMatrix();
  x_00 = -in_f15;
  glTranslatef(in_f12,in_f13,in_f14);
  glColor4f((float)(int)x,(float)(int)y,(float)(int)z,(float)in_t0);
  glBegin(9);
  glVertex3f(x_00,x_00,x_00);
  glVertex3f(in_f15,x_00,x_00);
  glVertex3f(in_f15,x_00,in_f15);
  glVertex3f(x_00,x_00,in_f15);
  glVertex3f(x_00,x_00,in_f15);
  glVertex3f(in_f15,x_00,in_f15);
  glVertex3f(in_f15,in_f15,in_f15);
  glVertex3f(x_00,in_f15,in_f15);
  glVertex3f(x_00,x_00,x_00);
  glVertex3f(x_00,in_f15,x_00);
  glVertex3f(in_f15,in_f15,x_00);
  glVertex3f(in_f15,x_00,x_00);
  glVertex3f(in_f15,x_00,x_00);
  glVertex3f(in_f15,in_f15,x_00);
  glVertex3f(in_f15,in_f15,in_f15);
  glVertex3f(in_f15,x_00,in_f15);
  glVertex3f(x_00,x_00,x_00);
  glVertex3f(x_00,x_00,in_f15);
  glVertex3f(x_00,in_f15,in_f15);
  glVertex3f(x_00,in_f15,x_00);
  glEnd();
  glPopMatrix();
  return;
}

// ========================================================
// 0x08909974: glinterface::cube(float, float, float, int, int, int, int, float)
// ========================================================
// Function: cube @ 08909974

/* DWARF original prototype: void cube(glinterface * this, GLfloat x, GLfloat y, GLfloat z, int r,
   int g, int b, int a, GLfloat size) */

void __thiscall
glinterface::cube(glinterface *this,GLfloat x,GLfloat y,GLfloat z,int r,int g,int b,int a,
                 GLfloat size)

{
  int in_t0;
  GLfloat in_f12;
  GLfloat in_f13;
  GLfloat in_f14;
  float in_f15;
  float x_00;
  
  glPushMatrix();
  x_00 = -in_f15;
  glTranslatef(in_f12,in_f13,in_f14);
  glColor4f((float)(int)x,(float)(int)y,(float)(int)z,(float)in_t0);
  glBegin(9);
  glVertex3f(x_00,x_00,x_00);
  glVertex3f(in_f15,x_00,x_00);
  glVertex3f(in_f15,x_00,in_f15);
  glVertex3f(x_00,x_00,in_f15);
  glVertex3f(x_00,x_00,in_f15);
  glVertex3f(in_f15,x_00,in_f15);
  glVertex3f(in_f15,in_f15,in_f15);
  glVertex3f(x_00,in_f15,in_f15);
  glVertex3f(x_00,x_00,x_00);
  glVertex3f(x_00,in_f15,x_00);
  glVertex3f(in_f15,in_f15,x_00);
  glVertex3f(in_f15,x_00,x_00);
  glVertex3f(in_f15,x_00,x_00);
  glVertex3f(in_f15,in_f15,x_00);
  glVertex3f(in_f15,in_f15,in_f15);
  glVertex3f(in_f15,x_00,in_f15);
  glVertex3f(x_00,x_00,x_00);
  glVertex3f(x_00,x_00,in_f15);
  glVertex3f(x_00,in_f15,in_f15);
  glVertex3f(x_00,in_f15,x_00);
  glEnd();
  glPopMatrix();
  return;
}

// ========================================================
// 0x08909b64: glinterface::lookat(float, float, float, float, float, float, float, float, float)
// ========================================================
// Function: lookat @ 08909b64

/* DWARF original prototype: void lookat(glinterface * this, GLfloat eyex, GLfloat eyey, GLfloat
   eyez, GLfloat centerx, GLfloat centery, GLfloat centerz, GLfloat upx, GLfloat upy, GLfloat upz)
    */

void __thiscall
glinterface::lookat(glinterface *this,GLfloat eyex,GLfloat eyey,GLfloat eyez,GLfloat centerx,
                   GLfloat centery,GLfloat centerz,GLfloat upx,GLfloat upy,GLfloat upz)

{
  SFtype SVar1;
  float in_f12;
  float fVar2;
  float in_f13;
  float in_f14;
  float in_f15;
  float in_f16;
  float in_f17;
  float in_f18;
  float in_f19;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float local_res0;
  float local_80;
  float local_7c;
  float local_78;
  undefined4 local_74;
  float local_70;
  float local_6c;
  float local_68;
  undefined4 local_64;
  float local_60;
  float local_5c;
  float local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  float local_40;
  
                    /* Unresolved local var: GLfloat[16] m@[???]
                       Unresolved local var: GLfloat[3] x@[???]
                       Unresolved local var: GLfloat[3] y@[???]
                       Unresolved local var: GLfloat[3] z@[???]
                       Unresolved local var: GLfloat mag@[???] */
  fVar8 = in_f13 - in_f16;
  fVar7 = in_f12 - in_f15;
  fVar6 = in_f14 - in_f17;
  fVar2 = fVar7 * fVar7 + fVar8 * fVar8 + fVar6 * fVar6;
  local_40 = in_f13;
  __extendsfdf2(fVar2);
  sqrt((double)CONCAT44(in_f13,fVar2));
  SVar1 = __truncdfsf2((DFtype)CONCAT44(in_f13,fVar2));
  if (SVar1 != 0.0) {
    fVar6 = fVar6 / SVar1;
    fVar7 = fVar7 / SVar1;
    fVar8 = fVar8 / SVar1;
  }
  fVar5 = local_res0 * fVar7 - in_f18 * fVar6;
  fVar3 = in_f19 * fVar6 - local_res0 * fVar8;
  fVar4 = in_f18 * fVar8 - in_f19 * fVar7;
  fVar2 = fVar3 * fVar3 + fVar5 * fVar5 + fVar4 * fVar4;
  fVar11 = fVar4 * fVar8 - fVar5 * fVar6;
  fVar9 = fVar3 * fVar6 - fVar7 * fVar4;
  fVar10 = fVar5 * fVar7 - fVar3 * fVar8;
  __extendsfdf2(fVar2);
  sqrt((double)CONCAT44(in_f13,fVar2));
  SVar1 = __truncdfsf2((DFtype)CONCAT44(in_f13,fVar2));
  if (SVar1 != 0.0) {
    fVar4 = fVar4 / SVar1;
    fVar3 = fVar3 / SVar1;
    fVar5 = fVar5 / SVar1;
  }
  fVar2 = fVar11 * fVar11 + fVar9 * fVar9 + fVar10 * fVar10;
  __extendsfdf2(fVar2);
  sqrt((double)CONCAT44(in_f13,fVar2));
  SVar1 = __truncdfsf2((DFtype)CONCAT44(in_f13,fVar2));
  if (SVar1 != 0.0) {
    fVar10 = fVar10 / SVar1;
    fVar11 = fVar11 / SVar1;
    fVar9 = fVar9 / SVar1;
  }
  local_54 = 0;
  local_44 = DAT_089dbce4;
  local_50 = 0;
  local_4c = 0;
  local_48 = 0;
  local_74 = 0;
  local_64 = 0;
  local_80 = fVar3;
  local_7c = fVar11;
  local_78 = fVar7;
  local_70 = fVar5;
  local_6c = fVar9;
  local_68 = fVar8;
  local_60 = fVar4;
  local_5c = fVar10;
  local_58 = fVar6;
  glMultMatrixf(&local_80);
  glTranslatef(-in_f12,-local_40,-in_f14);
  return;
}

// ========================================================
// 0x08909d84: glinterface::perspective(float, float, float, float)
// ========================================================
// Function: perspective @ 08909d84

/* DWARF original prototype: void perspective(glinterface * this, GLfloat fovy, GLfloat aspect,
   GLfloat zNear, GLfloat zFar) */

void __thiscall
glinterface::perspective(glinterface *this,GLfloat fovy,GLfloat aspect,GLfloat zNear,GLfloat zFar)

{
  undefined4 unaff_s0;
  undefined4 unaff_s1;
  undefined4 unaff_s2;
  undefined4 unaff_s3;
  undefined4 unaff_s4;
  undefined4 unaff_s5;
  undefined4 unaff_s6;
  undefined4 unaff_s7;
  SFtype SVar1;
  float in_f12;
  float fVar2;
  float in_f13;
  float fVar3;
  SFtype in_f14;
  SFtype SVar4;
  SFtype in_f15;
  SFtype SVar5;
  
                    /* Unresolved local var: GLfloat xmin@[???]
                       Unresolved local var: GLfloat xmax@[???]
                       Unresolved local var: GLfloat ymin@[???]
                       Unresolved local var: GLfloat ymax@[???] */
  fVar2 = (in_f12 * DAT_089dc44c) / DAT_089dc450;
  fVar3 = in_f13;
  SVar4 = in_f14;
  SVar5 = in_f15;
  __extendsfdf2(fVar2);
  tan((double)CONCAT44(fVar3,fVar2));
  SVar1 = __truncdfsf2((DFtype)CONCAT44(fVar3,fVar2));
  fVar2 = SVar1 * in_f14;
  __extendsfdf2(-fVar2 * in_f13);
  __extendsfdf2(fVar2 * in_f13);
  __extendsfdf2(-fVar2);
  __extendsfdf2(fVar2);
  __extendsfdf2(in_f14);
  __extendsfdf2(in_f15);
  glFrustum((GLdouble)CONCAT44(fVar3,in_f15),(GLdouble)CONCAT44(SVar5,SVar4),
            (GLdouble)CONCAT44(unaff_s1,unaff_s0),(GLdouble)CONCAT44(unaff_s3,unaff_s2),
            (GLdouble)CONCAT44(unaff_s5,unaff_s4),(GLdouble)CONCAT44(unaff_s7,unaff_s6));
  return;
}

